<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>27-Vue-v-for-key</title>
  <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
  <form>
    <input type="text" v-model="name">
    <input type="submit" @click.prevent="add" value="添加">
  </form>
  <ul>
    <li v-for="(person, index) in persons" :key="person.id">
      <input type="checkbox">
      <span>{{index}} - {{person.name}}</span>
    </li>
  </ul>
</div>
</body>
<script>
  /* 1. 创建 vue 实例对象 */
  let vm = new Vue({
    // 2. 声明vue的实例对象控制页面的哪个区域
    el: '#app',
    // 3. 声明vue控制区域可以使用的数据
    data: {
      persons: [
        {name: "zs", id: 1},
        {name: "ls", id: 2},
        {name: "ww", id: 3}
      ],
      name: ""
    },
    methods: {
      add() {
        let lastPerson = this.persons[this.persons.length - 1]
        let newPerson = {name: this.name, id: lastPerson.id + 1}
        // this.persons.push(newPerson)
        this.persons.unshift(newPerson)
        this.name = ""
      }
    }
  })
</script>
</html>
<!--
v-for 注意点
1. v-for 为了提升性能，在更新已渲染过的元素列表时，会采用“就地复用”策略。也正是因为这个策略，在某些时刻会导致我们的数据混乱。
例如：在列表前面新增了内容

2. 为了解决这个问题我们可以在渲染列表的时候给每一个元素加上一个独一无二的key
v-for 在更新已经渲染的元素列表时，会先判断key是否相同，如果相同则复用，如果不同则重新创建

3. key 属性注意点
不能使用index 作为key，因为当列表的内容新增或者删除时index都会发生变化，
这就导致了不能很好的复用没有发生改变的元素，大大降低了渲染的效率。
-->
